<?php
namespace app\pay\controller;
use think\Controller;
use think\Db;
use think\Validate;
use think\Loader;
use Wxpay;
/*********微信扫码模式二支付*********/
class WxpayController extends Controller {
//在类初始化方法中，引入相关类库 

//支付
    public function index(){
        //接收参数，验证
        $data = [
           'body'=>'订单描述',
           'attach'=>'订单标题',
           'out_trade_no'=>date('YmdHis').rand(10000,999999),
            'total_fee'=>'0.01',
            'product_id'=>rand(100000,999999),
        ];
        $validate = new Validate([
            ['body','require','请输入订单描述'],
            ['attach','require','请输入订单标题'],
            ['out_trade_no','require|alphaNum','订单编号输入错误|订单编号输入错误'],
            ['total_fee','require|number|gt:0','金额输入错误|金额输入错误|金额输入错误'],

        ]);
        if (!$validate->check($data)) {
            return ['code'=>0,'msg'=>$validate->getError()];
        }

        $host='http://'.$_SERVER['HTTP_HOST']; //获取当前域名
        $notify = new \Wxpay\lib\NativePay(); //实例化微信类
        $WxPayConfig = new \Wxpay\lib\WxPayConfig(); //实例化微信类
        $input = new \Wxpay\lib\WxPayUnifiedOrder(); //实例化微信类
        $input->SetBody($data['body']); //订单描述
        $input->SetOut_trade_no($data['out_trade_no']);//账单号
        $input->SetTotal_fee($data['total_fee']*100); //付款金额微信是以分为单位的，所以传过来的参数乘以100
        $input->SetNotify_url($host."/pay/Wxpay/notify");//回调地址
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id($data['product_id']);//商品id
        $result = $notify->GetPayUrl($input); //扫码模式二
        $codeurl = $result["code_url"];
        $this->assign('codeurl',$codeurl);
        //这里可以加入你的订单入库代码

        return $this->fetch();
    }
    //支付成功后回调
    public function notify(){

        $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //返回的xml
        file_put_contents(dirname(__FILE__).'/xml.txt',$xml); //记录日志 支付成功后查看xml.txt文件是否有内容      如果有xml格式文件说明回调成功
        //file_get_contents(dirname(__FILE__).'/xml.txt');
        $xmlObj=simplexml_load_string($xml,'SimplexmlElement',LIBxml_NOCDATA);
        $xmlArr=json_decode(json_encode($xmlObj),true);
        $out_trade_no=$xmlArr['out_trade_no']; //订单号
        $total_fee=$xmlArr['total_fee']/100; //回调回来的xml文件中金额是以分为单位的
        $result_code=$xmlArr['result_code']; //状态
        if($result_code=='SUCCESS'){ //数据库操作
        //处理数据库操作 例如修改订单状态 给账户充值等等

            echo 'SUCCESS'; //返回成功给微信端 一定要带上不然微信会一直回调8次
            exit;
        }else{ //失败
            return;
            exit;
        }
    }

}